I've uploaded diffs for some changes that I've made to the serial driver. The main feature which has been added is support for the AST FourPort serial card. With two of these boards, plus COM1+COM2, it is possible to have 10 serial lines simultaneously connected to your Linux system. The only problem with the AST FourPort is that apparently AST no longer makes it --- I bought my two from a salvage dealer at $25/board. It apparently was a very popular board to connect up to SCO systems, though. If you have other multiple I/O serial cards which you would like supported, send me mail with the technical specs to tytso@mit.edu. I make no guarantees, since I won't have the card to test it out (unless you want to give me a card, too!), but I'll give my best shot to include support for them. In order to support all of these extra ports, I was forced to make some changes to the way the serial board handled timers. Using the current setup, you need two timers for every serial port. This is not practical when you want your Linux system to potentially drive up to 12 serial lines, since there are only 32 timers available on the system. Therefore, I modified it so that it only requires the use of one timer facility, and does its own timer demultiplexing. Also, the AST FourPort was much more finicky about actually reading from the appropriate UART modem registers after an interrupt had been signalled, to acknowledge the interrupt. If you don't do this, it just stops generating interrupts. I've also fixed some bugs in the setserial and getserial ioctl()'s. I don't *think* these changes should affect normal people's use of the serial lines, although my timer changes would have added a little additional overhead. If people have time, I'd like you to try it this driver out, especially if you are using your driver in high-speed applications (such as KA9Q at 19,200 bps) and let me know how you fared. Thanks! - Ted P.S. Supposedly it is possible to run two AST FourPorts on the same interrupt line, by setting a magic dip switch. I haven't been able to get it to work though; if I set the jumers as the manual states, I simply lose all of the interrupts. If anyone can figure out what I'm doing wrong, or has managed to make it work themselves, please give me a call!
