From: Ralf Schlatterbeck (ralf@vmars.tuwien.ac.at)
Date: 04/28/93


From: ralf@vmars.tuwien.ac.at (Ralf Schlatterbeck)
Subject: Re: shared serial interrupts?
Date: Wed, 28 Apr 1993 12:15:12 GMT

drew@ladymacb.cs.colorado.edu (Drew Eckhardt) writes:

>In article <14334@cayman.COM> pgf@cayman.com (Paul Fox) writes:
>>
>>so i have 4 serial cards, all 8 bit, and an ethernet card, also 8 bit, and
>>i'm out of interrupt levels. i can't use my network. is it possible (even
>>in principle -- i'm pretty sure the current drivers won't do it) to share
>>interrupt levels for some set of the serial cards?
As far as I know, the current LINUX drivers WOULD do it if the hardware
did. I used a hardware hack to modify off the shelf cheap serial cards
to share a common interrupt (4 ports with 1 interrupt!). This however
is NOT on linux, but with another 386 unix and the FAS serial driver by
U. Doering.

[stuff about polling driver deleted]

>As far as sharing IRQ levels :

>No. IBM screwed up big time when doing the ISA bus. If two serial cards
>on the same IRQ enable interrupts at the SAME TIME, one pulls the bus low
>and the other pulls the bus high, resulting in a short circuit (not as bad
>as it sounds, but you won't see interrupt edges reliably).
Both pull the bus low, but when an interrupt comes the bus stays low
because the other card holds it down.
The net effect is, that no interrupt comes through.

[stuff about other possibilities deleted]

my hack works as follows (I won't take any reponsibility if someone
damages his computer because of this hack -- experienced hardware
hackers only who know what they're doing; I even don't know if this
would work with LINUX): (This is from an old post and some of the
context is missing, but you should get the idea)

I had the problem that in my computer the interrupt-lines have a pull-up
resistor. Why this works (because the interrupt is active high) I don't
know, possibly 'cause the interrupt is edge-triggered. Anyway, the wired-or
solution mentioned above [deleted] doesn't work -- unmodified.

The interrupt line is normally driven by a tri-state bus driver
74LS125. I used one of them for driving the serial line and wired all
interrupts from the SIO via a diode to the INPUT of the 74LS125. A pull
down resistor from input of the 74LS125 to ground did the rest. This
solution is uggly in that it requires a cable from one serial card to
the other serial card driving the bus. Schematics a follows:

from SIO
interrupt
lines
           4x 1N4148 or similar
  -----------|>|----+
                    |
  -----------|>|----+
                    |
  -----------|>|----+ 1/4 74LS125 (on one of the serial cards)
                    | |\
  -----------|>|----+----| >------- to int 3
                    | |/--+
                   +++ |
               4k7 | | to SIO int enable
                   | |
                   +++
                    |
                    _

-- 
Ralf Schlatterbeck
Treitlstr.3/182/1                            email: ralf@vmars.tuwien.ac.at
A-1040 Wien                                  Phone: +43/222/58801/8177
Austria                                      FAX:   +43/222/569149