From: mahmha@crl.com (Mark A. Horton) Subject: Cheap 4port/1IRQ serial card! Date: 25 Sep 1993 19:16:08 GMT
Need more cheap serial ports but short on IRQs ?
This works for me:
How to use one IRQ with the STB 4-COM card:
These lines must be added to rc.local or somewhere in system
initialization (as early as possible to prevent problems later)
Note that I specified ALL the serial ports, even the two standard
ones on the el-cheapo i/o & ide board as well as 0x3e8 and 0x2e8
which don't exist, just to avoid problems. When I get another one
of these STB 4-COM boards, I plan on disabling both uarts on the
i/o board, assigning IRQ 4 to the first STB card and IRQ 3 to the
second one and thus gain back 3 IRQs for more productive use :)
(such as another SCSI HA and another parallel printer)
If STB comes up with a way to alter the base ports address (say to 100)
then I'd probably get another two of these cards also! (are you listening,
STB???) In the meantime I might reverse-engineer the circuit and get
out the ole soldering iron myself!
yan (yet another note) - you MUST use setserial-2.01 to pull this off.
I don't think the stock one allows specification of the uart which is
critical to making this whole thing work!
# now set up the serial ports (put this in rc.local or wherever)
/etc/setserial -b /dev/cua0 uart 16450 port 0x3f8 irq 4
/etc/setserial -b /dev/cua1 uart 16450 port 0x2f8 irq 3
/etc/setserial -b /dev/cua2 uart 16450 port 0x3e8 irq 12
/etc/setserial -b /dev/cua3 uart 16450 port 0x2e8 irq 5
/etc/setserial -b /dev/cua4 uart 16550A port 0x1f8 irq 15
/etc/setserial -b /dev/cua5 uart 16550A port 0x1e8 irq 15
/etc/setserial -b /dev/cua6 uart 16550A port 0x2a8 irq 15
/etc/setserial -b /dev/cua7 uart 16550A port 0x1a8 irq 15
Note the last four ports at different addresses sharing the same IRQ.
The key thing here is that only ONE of the IRQ blocks must
be jumpered - in this case I chose B (Why? Just because.)
On the P0 block (port IRQ Block select) which maps the physical
ports to the proper IRQ block, set them all to the same one you
chose - in my case B which is: down,up,down,up,down,up,down,up
Pictorially this looks like :
P4 --u-----
P4 --d-----
P2 ---ud--- <=== this one gets the IRQ (blockB)
P1 ---d----
P0 dudududu <=== (blockB,blockB,blockB,blockB)
( - == no connect, u == top two pins on, d == bottom two pins on )
# and these are the results : (issue a /etc/setserial -a /dev/cua(n)
# where (n) is the number of the port)
/dev/cua0, Line 0, UART: 16450, Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
Flags: spd_normal
/dev/cua1, Line 1, UART: 16450, Port: 0x02f8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
Flags: spd_normal
/dev/cua2, Line 2, UART: 16450, Port: 0x03e8, IRQ: 12
Baud_base: 115200, close_delay: 50, divisor: 0
Flags: spd_normal
/dev/cua3, Line 3, UART: 16450, Port: 0x02e8, IRQ: 5
Baud_base: 115200, close_delay: 50, divisor: 0
Flags: spd_normal
/dev/cua4, Line 4, UART: 16550A, Port: 0x01f8, IRQ: 15
Baud_base: 115200, close_delay: 50, divisor: 0
Flags: spd_normal
/dev/cua5, Line 5, UART: 16550A, Port: 0x01e8, IRQ: 15
Baud_base: 115200, close_delay: 50, divisor: 0
Flags: spd_normal
/dev/cua6, Line 6, UART: 16550A, Port: 0x02a8, IRQ: 15
Baud_base: 115200, close_delay: 50, divisor: 0
Flags: spd_normal
/dev/cua7, Line 7, UART: 16550A, Port: 0x01a8, IRQ: 15
Baud_base: 115200, close_delay: 50, divisor: 0
Flags: spd_normal
That's it! It works great for me - have only run speeds up to
38400, so haven't played about with the hi_speed options and
cannot speak to them. 38400 is all my terminals and lines
will go to anyways.
This is a very reasonable 4-port solution requiring no driver
software additions. I think you can get the board for about
$110.00 (us) - at least I did. Some company was mentioned here
on the net as selling them. If you need their phone number and
or address and exact price, leave me email here and I'll send it
to you -- don't want this to become a "home internet shopper's channel"
now do we!
Hope this is of help to those who, like myself, are "IRQ-challenged"
;-) Mark