|
@@ -1,383 +0,0 @@
|
|
|
-
|
|
|
- specialix.txt -- specialix IO8+ multiport serial driver readme.
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- Copyright (C) 1997 Roger Wolff (R.E.Wolff@BitWizard.nl)
|
|
|
-
|
|
|
- Specialix pays for the development and support of this driver.
|
|
|
- Please DO contact io8-linux@specialix.co.uk if you require
|
|
|
- support.
|
|
|
-
|
|
|
- This driver was developed in the BitWizard linux device
|
|
|
- driver service. If you require a linux device driver for your
|
|
|
- product, please contact devices@BitWizard.nl for a quote.
|
|
|
-
|
|
|
- This code is firmly based on the riscom/8 serial driver,
|
|
|
- written by Dmitry Gorodchanin. The specialix IO8+ card
|
|
|
- programming information was obtained from the CL-CD1865 Data
|
|
|
- Book, and Specialix document number 6200059: IO8+ Hardware
|
|
|
- Functional Specification, augmented by document number 6200088:
|
|
|
- Merak Hardware Functional Specification. (IO8+/PCI is also
|
|
|
- called Merak)
|
|
|
-
|
|
|
-
|
|
|
- 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.
|
|
|
-
|
|
|
-
|
|
|
-Intro
|
|
|
-=====
|
|
|
-
|
|
|
-
|
|
|
-This file contains some random information, that I like to have online
|
|
|
-instead of in a manual that can get lost. Ever misplace your Linux
|
|
|
-kernel sources? And the manual of one of the boards in your computer?
|
|
|
-
|
|
|
-
|
|
|
-Addresses and interrupts
|
|
|
-========================
|
|
|
-
|
|
|
-Address dip switch settings:
|
|
|
-The dip switch sets bits 2-9 of the IO address.
|
|
|
-
|
|
|
- 9 8 7 6 5 4 3 2
|
|
|
- +-----------------+
|
|
|
- 0 | X X X X X X X |
|
|
|
- | | = IoBase = 0x100
|
|
|
- 1 | X |
|
|
|
- +-----------------+ ------ RS232 connectors ---->
|
|
|
-
|
|
|
- | | |
|
|
|
- edge connector
|
|
|
- | | |
|
|
|
- V V V
|
|
|
-
|
|
|
-Base address 0x100 caused a conflict in one of my computers once. I
|
|
|
-haven't the foggiest why. My Specialix card is now at 0x180. My
|
|
|
-other computer runs just fine with the Specialix card at 0x100....
|
|
|
-The card occupies 4 addresses, but actually only two are really used.
|
|
|
-
|
|
|
-The PCI version doesn't have any dip switches. The BIOS assigns
|
|
|
-an IO address.
|
|
|
-
|
|
|
-The driver now still autoprobes at 0x100, 0x180, 0x250 and 0x260. If
|
|
|
-that causes trouble for you, please report that. I'll remove
|
|
|
-autoprobing then.
|
|
|
-
|
|
|
-The driver will tell the card what IRQ to use, so you don't have to
|
|
|
-change any jumpers to change the IRQ. Just use a command line
|
|
|
-argument (irq=xx) to the insmod program to set the interrupt.
|
|
|
-
|
|
|
-The BIOS assigns the IRQ on the PCI version. You have no say in what
|
|
|
-IRQ to use in that case.
|
|
|
-
|
|
|
-If your specialix cards are not at the default locations, you can use
|
|
|
-the kernel command line argument "specialix=io0,irq0,io1,irq1...".
|
|
|
-Here "io0" is the io address for the first card, and "irq0" is the
|
|
|
-irq line that the first card should use. And so on.
|
|
|
-
|
|
|
-Examples.
|
|
|
-
|
|
|
-You use the driver as a module and have three cards at 0x100, 0x250
|
|
|
-and 0x180. And some way or another you want them detected in that
|
|
|
-order. Moreover irq 12 is taken (e.g. by your PS/2 mouse).
|
|
|
-
|
|
|
- insmod specialix.o iobase=0x100,0x250,0x180 irq=9,11,15
|
|
|
-
|
|
|
-The same three cards, but now in the kernel would require you to
|
|
|
-add
|
|
|
-
|
|
|
- specialix=0x100,9,0x250,11,0x180,15
|
|
|
-
|
|
|
-to the command line. This would become
|
|
|
-
|
|
|
- append="specialix=0x100,9,0x250,11,0x180,15"
|
|
|
-
|
|
|
-in your /etc/lilo.conf file if you use lilo.
|
|
|
-
|
|
|
-The Specialix driver is slightly odd: It allows you to have the second
|
|
|
-or third card detected without having a first card. This has
|
|
|
-advantages and disadvantages. A slot that isn't filled by an ISA card,
|
|
|
-might be filled if a PCI card is detected. Thus if you have an ISA
|
|
|
-card at 0x250 and a PCI card, you would get:
|
|
|
-
|
|
|
-sx0: specialix IO8+ Board at 0x100 not found.
|
|
|
-sx1: specialix IO8+ Board at 0x180 not found.
|
|
|
-sx2: specialix IO8+ board detected at 0x250, IRQ 12, CD1865 Rev. B.
|
|
|
-sx3: specialix IO8+ Board at 0x260 not found.
|
|
|
-sx0: specialix IO8+ board detected at 0xd800, IRQ 9, CD1865 Rev. B.
|
|
|
-
|
|
|
-This would happen if you don't give any probe hints to the driver.
|
|
|
-If you would specify:
|
|
|
-
|
|
|
- specialix=0x250,11
|
|
|
-
|
|
|
-you'd get the following messages:
|
|
|
-
|
|
|
-sx0: specialix IO8+ board detected at 0x250, IRQ 11, CD1865 Rev. B.
|
|
|
-sx1: specialix IO8+ board detected at 0xd800, IRQ 9, CD1865 Rev. B.
|
|
|
-
|
|
|
-ISA probing is aborted after the IO address you gave is exhausted, and
|
|
|
-the PCI card is now detected as the second card. The ISA card is now
|
|
|
-also forced to IRQ11....
|
|
|
-
|
|
|
-
|
|
|
-Baud rates
|
|
|
-==========
|
|
|
-
|
|
|
-The rev 1.2 and below boards use a CL-CD1864. These chips can only
|
|
|
-do 64kbit. The rev 1.3 and newer boards use a CL-CD1865. These chips
|
|
|
-are officially capable of 115k2.
|
|
|
-
|
|
|
-The Specialix card uses a 25MHz crystal (in times two mode, which in
|
|
|
-fact is a divided by two mode). This is not enough to reach the rated
|
|
|
-115k2 on all ports at the same time. With this clock rate you can only
|
|
|
-do 37% of this rate. This means that at 115k2 on all ports you are
|
|
|
-going to lose characters (The chip cannot handle that many incoming
|
|
|
-bits at this clock rate.) (Yes, you read that correctly: there is a
|
|
|
-limit to the number of -=bits=- per second that the chip can handle.)
|
|
|
-
|
|
|
-If you near the "limit" you will first start to see a graceful
|
|
|
-degradation in that the chip cannot keep the transmitter busy at all
|
|
|
-times. However with a central clock this slow, you can also get it to
|
|
|
-miss incoming characters. The driver will print a warning message when
|
|
|
-you are outside the official specs. The messages usually show up in
|
|
|
-the file /var/log/messages .
|
|
|
-
|
|
|
-The specialix card cannot reliably do 115k2. If you use it, you have
|
|
|
-to do "extensive testing" (*) to verify if it actually works.
|
|
|
-
|
|
|
-When "mgetty" communicates with my modem at 115k2 it reports:
|
|
|
-got: +++[0d]ATQ0V1H0[0d][0d][8a]O[cb][0d][8a]
|
|
|
- ^^^^ ^^^^ ^^^^
|
|
|
-
|
|
|
-The three characters that have the "^^^" under them have suffered a
|
|
|
-bit error in the highest bit. In conclusion: I've tested it, and found
|
|
|
-that it simply DOESN'T work for me. I also suspect that this is also
|
|
|
-caused by the baud rate being just a little bit out of tune.
|
|
|
-
|
|
|
-I upgraded the crystal to 66Mhz on one of my Specialix cards. Works
|
|
|
-great! Contact me for details. (Voids warranty, requires a steady hand
|
|
|
-and more such restrictions....)
|
|
|
-
|
|
|
-
|
|
|
-(*) Cirrus logic CD1864 databook, page 40.
|
|
|
-
|
|
|
-
|
|
|
-Cables for the Specialix IO8+
|
|
|
-=============================
|
|
|
-
|
|
|
-The pinout of the connectors on the IO8+ is:
|
|
|
-
|
|
|
- pin short direction long name
|
|
|
- name
|
|
|
- Pin 1 DCD input Data Carrier Detect
|
|
|
- Pin 2 RXD input Receive
|
|
|
- Pin 3 DTR/RTS output Data Terminal Ready/Ready To Send
|
|
|
- Pin 4 GND - Ground
|
|
|
- Pin 5 TXD output Transmit
|
|
|
- Pin 6 CTS input Clear To Send
|
|
|
-
|
|
|
-
|
|
|
- -- 6 5 4 3 2 1 --
|
|
|
- | |
|
|
|
- | |
|
|
|
- | |
|
|
|
- | |
|
|
|
- +----- -----+
|
|
|
- |__________|
|
|
|
- clip
|
|
|
-
|
|
|
- Front view of an RJ12 connector. Cable moves "into" the paper.
|
|
|
- (the plug is ready to plug into your mouth this way...)
|
|
|
-
|
|
|
-
|
|
|
- NULL cable. I don't know who is going to use these except for
|
|
|
- testing purposes, but I tested the cards with this cable. (It
|
|
|
- took quite a while to figure out, so I'm not going to delete
|
|
|
- it. So there! :-)
|
|
|
-
|
|
|
-
|
|
|
- This end goes This end needs
|
|
|
- straight into the some twists in
|
|
|
- RJ12 plug. the wiring.
|
|
|
- IO8+ RJ12 IO8+ RJ12
|
|
|
- 1 DCD white -
|
|
|
- - - 1 DCD
|
|
|
- 2 RXD black 5 TXD
|
|
|
- 3 DTR/RTS red 6 CTS
|
|
|
- 4 GND green 4 GND
|
|
|
- 5 TXD yellow 2 RXD
|
|
|
- 6 CTS blue 3 DTR/RTS
|
|
|
-
|
|
|
-
|
|
|
- Same NULL cable, but now sorted on the second column.
|
|
|
-
|
|
|
- 1 DCD white -
|
|
|
- - - 1 DCD
|
|
|
- 5 TXD yellow 2 RXD
|
|
|
- 6 CTS blue 3 DTR/RTS
|
|
|
- 4 GND green 4 GND
|
|
|
- 2 RXD black 5 TXD
|
|
|
- 3 DTR/RTS red 6 CTS
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- This is a modem cable usable for hardware handshaking:
|
|
|
- RJ12 DB25 DB9
|
|
|
- 1 DCD white 8 DCD 1 DCD
|
|
|
- 2 RXD black 3 RXD 2 RXD
|
|
|
- 3 DTR/RTS red 4 RTS 7 RTS
|
|
|
- 4 GND green 7 GND 5 GND
|
|
|
- 5 TXD yellow 2 TXD 3 TXD
|
|
|
- 6 CTS blue 5 CTS 8 CTS
|
|
|
- +---- 6 DSR 6 DSR
|
|
|
- +---- 20 DTR 4 DTR
|
|
|
-
|
|
|
- This is a modem cable usable for software handshaking:
|
|
|
- It allows you to reset the modem using the DTR ioctls.
|
|
|
- I (REW) have never tested this, "but xxxxxxxxxxxxx
|
|
|
- says that it works." If you test this, please
|
|
|
- tell me and I'll fill in your name on the xxx's.
|
|
|
-
|
|
|
- RJ12 DB25 DB9
|
|
|
- 1 DCD white 8 DCD 1 DCD
|
|
|
- 2 RXD black 3 RXD 2 RXD
|
|
|
- 3 DTR/RTS red 20 DTR 4 DTR
|
|
|
- 4 GND green 7 GND 5 GND
|
|
|
- 5 TXD yellow 2 TXD 3 TXD
|
|
|
- 6 CTS blue 5 CTS 8 CTS
|
|
|
- +---- 6 DSR 6 DSR
|
|
|
- +---- 4 RTS 7 RTS
|
|
|
-
|
|
|
- I bought a 6 wire flat cable. It was colored as indicated.
|
|
|
- Check that yours is the same before you trust me on this.
|
|
|
-
|
|
|
-
|
|
|
-Hardware handshaking issues.
|
|
|
-============================
|
|
|
-
|
|
|
-The driver can be told to operate in two different ways. The default
|
|
|
-behaviour is specialix.sx_rtscts = 0 where the pin behaves as DTR when
|
|
|
-hardware handshaking is off. It behaves as the RTS hardware
|
|
|
-handshaking signal when hardware handshaking is selected.
|
|
|
-
|
|
|
-When you use this, you have to use the appropriate cable. The
|
|
|
-cable will either be compatible with hardware handshaking or with
|
|
|
-software handshaking. So switching on the fly is not really an
|
|
|
-option.
|
|
|
-
|
|
|
-I actually prefer to use the "specialix.sx_rtscts=1" option.
|
|
|
-This makes the DTR/RTS pin always an RTS pin, and ioctls to
|
|
|
-change DTR are always ignored. I have a cable that is configured
|
|
|
-for this.
|
|
|
-
|
|
|
-
|
|
|
-Ports and devices
|
|
|
-=================
|
|
|
-
|
|
|
-Port 0 is the one furthest from the card-edge connector.
|
|
|
-
|
|
|
-Devices:
|
|
|
-
|
|
|
-You should make the devices as follows:
|
|
|
-
|
|
|
-bash
|
|
|
-cd /dev
|
|
|
-for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
|
|
|
- 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
|
|
-do
|
|
|
- echo -n "$i "
|
|
|
- mknod /dev/ttyW$i c 75 $i
|
|
|
- mknod /dev/cuw$i c 76 $i
|
|
|
-done
|
|
|
-echo ""
|
|
|
-
|
|
|
-If your system doesn't come with these devices preinstalled, bug your
|
|
|
-linux-vendor about this. They have had ample time to get this
|
|
|
-implemented by now.
|
|
|
-
|
|
|
-You cannot have more than 4 boards in one computer. The card only
|
|
|
-supports 4 different interrupts. If you really want this, contact me
|
|
|
-about this and I'll give you a few tips (requires soldering iron)....
|
|
|
-
|
|
|
-If you have enough PCI slots, you can probably use more than 4 PCI
|
|
|
-versions of the card though....
|
|
|
-
|
|
|
-The PCI version of the card cannot adhere to the mechanical part of
|
|
|
-the PCI spec because the 8 serial connectors are simply too large. If
|
|
|
-it doesn't fit in your computer, bring back the card.
|
|
|
-
|
|
|
-
|
|
|
-------------------------------------------------------------------------
|
|
|
-
|
|
|
-
|
|
|
- Fixed bugs and restrictions:
|
|
|
- - During initialization, interrupts are blindly turned on.
|
|
|
- Having a shadow variable would cause an extra memory
|
|
|
- access on every IO instruction.
|
|
|
- - The interrupt (on the card) should be disabled when we
|
|
|
- don't allocate the Linux end of the interrupt. This allows
|
|
|
- a different driver/card to use it while all ports are not in
|
|
|
- use..... (a la standard serial port)
|
|
|
- == An extra _off variant of the sx_in and sx_out macros are
|
|
|
- now available. They don't set the interrupt enable bit.
|
|
|
- These are used during initialization. Normal operation uses
|
|
|
- the old variant which enables the interrupt line.
|
|
|
- - RTS/DTR issue needs to be implemented according to
|
|
|
- specialix' spec.
|
|
|
- I kind of like the "determinism" of the current
|
|
|
- implementation. Compile time flag?
|
|
|
- == Ok. Compile time flag! Default is how Specialix likes it.
|
|
|
- == Now a config time flag! Gets saved in your config file. Neat!
|
|
|
- - Can you set the IO address from the lilo command line?
|
|
|
- If you need this, bug me about it, I'll make it.
|
|
|
- == Hah! No bugging needed. Fixed! :-)
|
|
|
- - Cirrus logic hasn't gotten back to me yet why the CD1865 can
|
|
|
- and the CD1864 can't do 115k2. I suspect that this is
|
|
|
- because the CD1864 is not rated for 33MHz operation.
|
|
|
- Therefore the CD1864 versions of the card can't do 115k2 on
|
|
|
- all ports just like the CD1865 versions. The driver does
|
|
|
- not block 115k2 on CD1864 cards.
|
|
|
- == I called the Cirrus Logic representative here in Holland.
|
|
|
- The CD1864 databook is identical to the CD1865 databook,
|
|
|
- except for an extra warning at the end. Similar Bit errors
|
|
|
- have been observed in testing at 115k2 on both an 1865 and
|
|
|
- a 1864 chip. I see no reason why I would prohibit 115k2 on
|
|
|
- 1864 chips and not do it on 1865 chips. Actually there is
|
|
|
- reason to prohibit it on BOTH chips. I print a warning.
|
|
|
- If you use 115k2, you're on your own.
|
|
|
- - A spiky CD may send spurious HUPs. Also in CLOCAL???
|
|
|
- -- A fix for this turned out to be counter productive.
|
|
|
- Different fix? Current behaviour is acceptable?
|
|
|
- -- Maybe the current implementation is correct. If anybody
|
|
|
- gets bitten by this, please report, and it will get fixed.
|
|
|
-
|
|
|
- -- Testing revealed that when in CLOCAL, the problem doesn't
|
|
|
- occur. As warned for in the CD1865 manual, the chip may
|
|
|
- send modem intr's on a spike. We could filter those out,
|
|
|
- but that would be a cludge anyway (You'd still risk getting
|
|
|
- a spurious HUP when two spikes occur.).....
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- Bugs & restrictions:
|
|
|
- - This is a difficult card to autoprobe.
|
|
|
- You have to WRITE to the address register to even
|
|
|
- read-probe a CD186x register. Disable autodetection?
|
|
|
- -- Specialix: any suggestions?
|
|
|
-
|
|
|
-
|