clewis@eci386.uucp (Chris Lewis) (05/26/90)
In article <1990May21.032648.9703@ddsw1.MCS.COM> karl@mcs.MCS.COM (Karl Denninger) writes: > IF each device that has an interrupt and wants to share it does both of the > following, it will work: > 1) The board must have open collector drivers on the IRQ line (few do) A clarification (if anyone cares): Last I checked (designing a smart async card), you don't want open collector (or at least what most electrical designers would call one). The interrupt lines appear to be active HIGH (not low), and IBM motherboard specifications do not include pull-down (they would be pull-up with normal active low O-C gates) resistors either. Eg: standard TTL O-C gates are backwards sense, and if you have the interrupt enabled, but the interrupt line floating, you will probably have interrupt flicker due to backplane crosstalk. Kaboom! Spent a couple of days finding this problem, and many years since then cursing IBM. The "generic" approach is somewhat grotty. Each controller's interrupt driver should be a tristate gate, with the input tied to the "active" state. (low for an inverting driver) You turn the interrupt *on* by enabling the tristate's output drivers, and off by disabling the drivers (output is high-impedance). (rather than toggling the input). What makes things worse is that most tristate driver's output float high (*active* damn it!) when disabled, so you *must* have a pull-down resistor of sufficiently low resistance to pull the driver outputs down regardless of back-plane crosstalk and the inherent float-high of the driver. But not so low as to fry the driver when you turn on the driver because everybody else driving that interrupt line have a pull-down too. If IBM's backplane spec had specified pull-downs on the motherboard this wouldn't be a problem. Or if there were such things as open-collector active-high gates available (I've never seen any in the data books). A few of the IBM schematics I've seen show use of a single section of a 74LS125 quad tristate driver in just this fashion. Most controller vendors don't bother and drive the interrupt with a non-gangable driver. Like a LSTTL gate. So if you try to share an interrupt, at least one controller's interrupt driver will be shorted. Probably with severe software confusion ("my no is more powerful than your yes" or v-v), possibly with driver fry. Even with tristate drivers with only one active position when enabled can cause problems depending on the gates (connecting two enabled tristate drivers's output together even when at the same logic value can fry them depending on implementation technology and the specific part). On the other hand, most async board manufacturers have figured this out (because you want 3 boards for 24 ports right?) so they usually get it right. Eventually.... *Many* many other hardware/software platforms (eg: NCR Towers) can share interrupts quite fine. Because they have sane electronics designers who know what open-collector gates are and where to use them, often the number of interrupts available is fewer than the number of different controllers that could be installed, and the interrupt routines know enough to confirm with their device that the interrupt was for them before doing something. IBM lacked foresight in this area.... And frankly, I suspect many OS vendors for AT-style backplane systems don't bother to support interrupt-sharing in the kernel because in general it won't work. > The problem in the PC world is (1) -- MSDOS devices for the most part don't > use interrupts, and thus hardware people have always been sloppy. 'Tis > life. Too true. The specs are to blame. > >Third, How does one configure in a Wangtek compatible tape drive? > >The manual seems a bit thin on this; apparantly there is > >an option under KCONFIG to turn on a Wangtek tape driver, > >but [here comes the interrupt question again], what interrupt > >level does one choose, and how does one tell that to KCONFIG? > >I am interested in using an Everex EV-833 tape drive subsystem. > >Everex says their drives work fine under ISC, but Everex doesn't > >*support* them that way, and claims not to know how to configure them. > As it comes out of the box, that drive wants to be on IRQ 5. Changing that > requires poking around in the master file entries. We let the Wangtek have interrupt 5, and disable LPT2's driver. T'is the simplest solution in 386/ix - our oldish version of 386/ix doesn't allow you to change the Wangtek's interrupt number in the driver and it cares. -- Chris Lewis, Elegant Communications Inc, {uunet!attcan,utzoo}!lsuc!eci386!clewis Ferret mailing list: eci386!ferret-list, psroff mailing list: eci386!psroff-list