1 2 specialix.txt -- specialix IO8+ multiport serial driver readme. 3 4 5 6 Copyright (C) 1997 Roger Wolff (R.E.Wolff@BitWizard.nl) 7 8 Specialix pays for the development and support of this driver. 9 Please DO contact io8-linux@specialix.co.uk if you require 10 support. 11 12 This driver was developed in the BitWizard linux device 13 driver service. If you require a linux device driver for your 14 product, please contact devices@BitWizard.nl for a quote. 15 16 This code is firmly based on the riscom/8 serial driver, 17 written by Dmitry Gorodchanin. The specialix IO8+ card 18 programming information was obtained from the CL-CD1865 Data 19 Book, and Specialix document number 6200059: IO8+ Hardware 20 Functional Specification, augmented by document number 6200088: 21 Merak Hardware Functional Specification. (IO8+/PCI is also 22 called Merak) 23 24 25 This program is free software; you can redistribute it and/or 26 modify it under the terms of the GNU General Public License as 27 published by the Free Software Foundation; either version 2 of 28 the License, or (at your option) any later version. 29 30 This program is distributed in the hope that it will be 31 useful, but WITHOUT ANY WARRANTY; without even the implied 32 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 33 PURPOSE. See the GNU General Public License for more details. 34 35 You should have received a copy of the GNU General Public 36 License along with this program; if not, write to the Free 37 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, 38 USA. 39 40 41Intro 42===== 43 44 45This file contains some random information, that I like to have online 46instead of in a manual that can get lost. Ever misplace your Linux 47kernel sources? And the manual of one of the boards in your computer? 48 49 50Addresses and interrupts 51======================== 52 53Address dip switch settings: 54The dip switch sets bits 2-9 of the IO address. 55 56 9 8 7 6 5 4 3 2 57 +-----------------+ 58 0 | X X X X X X X | 59 | | = IoBase = 0x100 60 1 | X | 61 +-----------------+ ------ RS232 connectors ----> 62 63 | | | 64 edge connector 65 | | | 66 V V V 67 68Base address 0x100 caused a conflict in one of my computers once. I 69haven't the foggiest why. My Specialix card is now at 0x180. My 70other computer runs just fine with the Specialix card at 0x100.... 71The card occupies 4 addresses, but actually only two are really used. 72 73The PCI version doesn't have any dip switches. The BIOS assigns 74an IO address. 75 76The driver now still autoprobes at 0x100, 0x180, 0x250 and 0x260. If 77that causes trouble for you, please report that. I'll remove 78autoprobing then. 79 80The driver will tell the card what IRQ to use, so you don't have to 81change any jumpers to change the IRQ. Just use a command line 82argument (irq=xx) to the insmod program to set the interrupt. 83 84The BIOS assigns the IRQ on the PCI version. You have no say in what 85IRQ to use in that case. 86 87If your specialix cards are not at the default locations, you can use 88the kernel command line argument "specialix=io0,irq0,io1,irq1...". 89Here "io0" is the io address for the first card, and "irq0" is the 90irq line that the first card should use. And so on. 91 92Examples. 93 94You use the driver as a module and have three cards at 0x100, 0x250 95and 0x180. And some way or another you want them detected in that 96order. Moreover irq 12 is taken (e.g. by your PS/2 mouse). 97 98 insmod specialix.o iobase=0x100,0x250,0x180 irq=9,11,15 99 100The same three cards, but now in the kernel would require you to 101add 102 103 specialix=0x100,9,0x250,11,0x180,15 104 105to the command line. This would become 106 107 append="specialix=0x100,9,0x250,11,0x180,15" 108 109in your /etc/lilo.conf file if you use lilo. 110 111The Specialix driver is slightly odd: It allows you to have the second 112or third card detected without having a first card. This has 113advantages and disadvantages. A slot that isn't filled by an ISA card, 114might be filled if a PCI card is detected. Thus if you have an ISA 115card at 0x250 and a PCI card, you would get: 116 117sx0: specialix IO8+ Board at 0x100 not found. 118sx1: specialix IO8+ Board at 0x180 not found. 119sx2: specialix IO8+ board detected at 0x250, IRQ 12, CD1865 Rev. B. 120sx3: specialix IO8+ Board at 0x260 not found. 121sx0: specialix IO8+ board detected at 0xd800, IRQ 9, CD1865 Rev. B. 122 123This would happen if you don't give any probe hints to the driver. 124If you would specify: 125 126 specialix=0x250,11 127 128you'd get the following messages: 129 130sx0: specialix IO8+ board detected at 0x250, IRQ 11, CD1865 Rev. B. 131sx1: specialix IO8+ board detected at 0xd800, IRQ 9, CD1865 Rev. B. 132 133ISA probing is aborted after the IO address you gave is exhausted, and 134the PCI card is now detected as the second card. The ISA card is now 135also forced to IRQ11.... 136 137 138Baud rates 139========== 140 141The rev 1.2 and below boards use a CL-CD1864. These chips can only 142do 64kbit. The rev 1.3 and newer boards use a CL-CD1865. These chips 143are officially capable of 115k2. 144 145The Specialix card uses a 25MHz crystal (in times two mode, which in 146fact is a divided by two mode). This is not enough to reach the rated 147115k2 on all ports at the same time. With this clock rate you can only 148do 37% of this rate. This means that at 115k2 on all ports you are 149going to lose characters (The chip cannot handle that many incoming 150bits at this clock rate.) (Yes, you read that correctly: there is a 151limit to the number of -=bits=- per second that the chip can handle.) 152 153If you near the "limit" you will first start to see a graceful 154degradation in that the chip cannot keep the transmitter busy at all 155times. However with a central clock this slow, you can also get it to 156miss incoming characters. The driver will print a warning message when 157you are outside the official specs. The messages usually show up in 158the file /var/log/messages . 159 160The specialix card cannot reliably do 115k2. If you use it, you have 161to do "extensive testing" (*) to verify if it actually works. 162 163When "mgetty" communicates with my modem at 115k2 it reports: 164got: +++[0d]ATQ0V1H0[0d][0d][8a]O[cb][0d][8a] 165 ^^^^ ^^^^ ^^^^ 166 167The three characters that have the "^^^" under them have suffered a 168bit error in the highest bit. In conclusion: I've tested it, and found 169that it simply DOESN'T work for me. I also suspect that this is also 170caused by the baud rate being just a little bit out of tune. 171 172I upgraded the crystal to 66Mhz on one of my Specialix cards. Works 173great! Contact me for details. (Voids warranty, requires a steady hand 174and more such restrictions....) 175 176 177(*) Cirrus logic CD1864 databook, page 40. 178 179 180Cables for the Specialix IO8+ 181============================= 182 183The pinout of the connectors on the IO8+ is: 184 185 pin short direction long name 186 name 187 Pin 1 DCD input Data Carrier Detect 188 Pin 2 RXD input Receive 189 Pin 3 DTR/RTS output Data Terminal Ready/Ready To Send 190 Pin 4 GND - Ground 191 Pin 5 TXD output Transmit 192 Pin 6 CTS input Clear To Send 193 194 195 -- 6 5 4 3 2 1 -- 196 | | 197 | | 198 | | 199 | | 200 +----- -----+ 201 |__________| 202 clip 203 204 Front view of an RJ12 connector. Cable moves "into" the paper. 205 (the plug is ready to plug into your mouth this way...) 206 207 208 NULL cable. I don't know who is going to use these except for 209 testing purposes, but I tested the cards with this cable. (It 210 took quite a while to figure out, so I'm not going to delete 211 it. So there! :-) 212 213 214 This end goes This end needs 215 straight into the some twists in 216 RJ12 plug. the wiring. 217 IO8+ RJ12 IO8+ RJ12 218 1 DCD white - 219 - - 1 DCD 220 2 RXD black 5 TXD 221 3 DTR/RTS red 6 CTS 222 4 GND green 4 GND 223 5 TXD yellow 2 RXD 224 6 CTS blue 3 DTR/RTS 225 226 227 Same NULL cable, but now sorted on the second column. 228 229 1 DCD white - 230 - - 1 DCD 231 5 TXD yellow 2 RXD 232 6 CTS blue 3 DTR/RTS 233 4 GND green 4 GND 234 2 RXD black 5 TXD 235 3 DTR/RTS red 6 CTS 236 237 238 239 This is a modem cable usable for hardware handshaking: 240 RJ12 DB25 DB9 241 1 DCD white 8 DCD 1 DCD 242 2 RXD black 3 RXD 2 RXD 243 3 DTR/RTS red 4 RTS 7 RTS 244 4 GND green 7 GND 5 GND 245 5 TXD yellow 2 TXD 3 TXD 246 6 CTS blue 5 CTS 8 CTS 247 +---- 6 DSR 6 DSR 248 +---- 20 DTR 4 DTR 249 250 This is a modem cable usable for software handshaking: 251 It allows you to reset the modem using the DTR ioctls. 252 I (REW) have never tested this, "but xxxxxxxxxxxxx 253 says that it works." If you test this, please 254 tell me and I'll fill in your name on the xxx's. 255 256 RJ12 DB25 DB9 257 1 DCD white 8 DCD 1 DCD 258 2 RXD black 3 RXD 2 RXD 259 3 DTR/RTS red 20 DTR 4 DTR 260 4 GND green 7 GND 5 GND 261 5 TXD yellow 2 TXD 3 TXD 262 6 CTS blue 5 CTS 8 CTS 263 +---- 6 DSR 6 DSR 264 +---- 4 RTS 7 RTS 265 266 I bought a 6 wire flat cable. It was colored as indicated. 267 Check that yours is the same before you trust me on this. 268 269 270Hardware handshaking issues. 271============================ 272 273The driver can be told to operate in two different ways. The default 274behaviour is specialix.sx_rtscts = 0 where the pin behaves as DTR when 275hardware handshaking is off. It behaves as the RTS hardware 276handshaking signal when hardware handshaking is selected. 277 278When you use this, you have to use the appropriate cable. The 279cable will either be compatible with hardware handshaking or with 280software handshaking. So switching on the fly is not really an 281option. 282 283I actually prefer to use the "specialix.sx_rtscts=1" option. 284This makes the DTR/RTS pin always an RTS pin, and ioctls to 285change DTR are always ignored. I have a cable that is configured 286for this. 287 288 289Ports and devices 290================= 291 292Port 0 is the one furthest from the card-edge connector. 293 294Devices: 295 296You should make the devices as follows: 297 298bash 299cd /dev 300for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \ 301 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 302do 303 echo -n "$i " 304 mknod /dev/ttyW$i c 75 $i 305 mknod /dev/cuw$i c 76 $i 306done 307echo "" 308 309If your system doesn't come with these devices preinstalled, bug your 310linux-vendor about this. They have had ample time to get this 311implemented by now. 312 313You cannot have more than 4 boards in one computer. The card only 314supports 4 different interrupts. If you really want this, contact me 315about this and I'll give you a few tips (requires soldering iron).... 316 317If you have enough PCI slots, you can probably use more than 4 PCI 318versions of the card though.... 319 320The PCI version of the card cannot adhere to the mechanical part of 321the PCI spec because the 8 serial connectors are simply too large. If 322it doesn't fit in your computer, bring back the card. 323 324 325------------------------------------------------------------------------ 326 327 328 Fixed bugs and restrictions: 329 - During initialization, interrupts are blindly turned on. 330 Having a shadow variable would cause an extra memory 331 access on every IO instruction. 332 - The interrupt (on the card) should be disabled when we 333 don't allocate the Linux end of the interrupt. This allows 334 a different driver/card to use it while all ports are not in 335 use..... (a la standard serial port) 336 == An extra _off variant of the sx_in and sx_out macros are 337 now available. They don't set the interrupt enable bit. 338 These are used during initialization. Normal operation uses 339 the old variant which enables the interrupt line. 340 - RTS/DTR issue needs to be implemented according to 341 specialix' spec. 342 I kind of like the "determinism" of the current 343 implementation. Compile time flag? 344 == Ok. Compile time flag! Default is how Specialix likes it. 345 == Now a config time flag! Gets saved in your config file. Neat! 346 - Can you set the IO address from the lilo command line? 347 If you need this, bug me about it, I'll make it. 348 == Hah! No bugging needed. Fixed! :-) 349 - Cirrus logic hasn't gotten back to me yet why the CD1865 can 350 and the CD1864 can't do 115k2. I suspect that this is 351 because the CD1864 is not rated for 33MHz operation. 352 Therefore the CD1864 versions of the card can't do 115k2 on 353 all ports just like the CD1865 versions. The driver does 354 not block 115k2 on CD1864 cards. 355 == I called the Cirrus Logic representative here in Holland. 356 The CD1864 databook is identical to the CD1865 databook, 357 except for an extra warning at the end. Similar Bit errors 358 have been observed in testing at 115k2 on both an 1865 and 359 a 1864 chip. I see no reason why I would prohibit 115k2 on 360 1864 chips and not do it on 1865 chips. Actually there is 361 reason to prohibit it on BOTH chips. I print a warning. 362 If you use 115k2, you're on your own. 363 - A spiky CD may send spurious HUPs. Also in CLOCAL??? 364 -- A fix for this turned out to be counter productive. 365 Different fix? Current behaviour is acceptable? 366 -- Maybe the current implementation is correct. If anybody 367 gets bitten by this, please report, and it will get fixed. 368 369 -- Testing revealed that when in CLOCAL, the problem doesn't 370 occur. As warned for in the CD1865 manual, the chip may 371 send modem intr's on a spike. We could filter those out, 372 but that would be a cludge anyway (You'd still risk getting 373 a spurious HUP when two spikes occur.)..... 374 375 376 377 Bugs & restrictions: 378 - This is a difficult card to autoprobe. 379 You have to WRITE to the address register to even 380 read-probe a CD186x register. Disable autodetection? 381 -- Specialix: any suggestions? 382 383 384