From owner-freebsd-multimedia Tue Mar 18 19:29:44 1997 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.5/8.8.5) id TAA01449 for multimedia-outgoing; Tue, 18 Mar 1997 19:29:44 -0800 (PST) Received: from whizzo.transsys.com (whizzo.TransSys.COM [144.202.42.10]) by freefall.freebsd.org (8.8.5/8.8.5) with ESMTP id TAA01401 for ; Tue, 18 Mar 1997 19:29:22 -0800 (PST) Received: from localhost.transsys.com (localhost.transsys.com [127.0.0.1]) by whizzo.transsys.com (8.8.5/8.7.3) with SMTP id WAA01841; Tue, 18 Mar 1997 22:29:18 -0500 (EST) Message-Id: <199703190329.WAA01841@whizzo.transsys.com> X-Mailer: exmh version 2.0gamma 1/27/96 To: Amancio Hasty cc: multimedia@freebsd.org From: "Louis A. Mamakos" Subject: Re: PCI shared IRQs? References: <199703181840.KAA14284@rah.star-gate.com> In-reply-to: Your message of "Tue, 18 Mar 1997 10:40:40 PST." <199703181840.KAA14284@rah.star-gate.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Tue, 18 Mar 1997 22:29:18 -0500 Sender: owner-multimedia@freebsd.org X-Loop: FreeBSD.org Precedence: bulk > > > Does anyone in the list know how pci.c manages to multiplex different > devices using the same IRQ? The nitty-gritty is the dispatch routing in /sys/pci/pci.c pci_int(), which walks the list of register interrupt handlers attached to each PCI interrupt. When the first driver registers for an interrupt, the interrupt handler points directly to the driver. When subsequent drivers register, then interrupt handler points the dispatch routine and a list of interrupt handlers is created, each of which is called. The reason this can be made to work is that interrupts are level sensitive on the PCI bus, rather than edge sensistive on the ISA. Thus, a board will continue to assert an interrupt until serviced. louie