summaryrefslogtreecommitdiffstats
path: root/sys/pci/pci_compat.c
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1999-01-13 04:59:19 +0000
committerbde <bde@FreeBSD.org>1999-01-13 04:59:19 +0000
commit3c957151d334c463eb5e1e118af59ae0c19c65f5 (patch)
treee001356130f2926ac0f932b52e439dc9b732adcb /sys/pci/pci_compat.c
parenta674a735374d522a6401e59952c96357f535be62 (diff)
downloadFreeBSD-src-3c957151d334c463eb5e1e118af59ae0c19c65f5.zip
FreeBSD-src-3c957151d334c463eb5e1e118af59ae0c19c65f5.tar.gz
Let drivers specify interrupt flags (INTR_EXCL and/or INTR_FAST)
using the new pci_map_int_right() variant of pci_map_int(). Fast interrupts work for PCI devices if and only if they are exclusive. (The PCI interrupt mux doesn't support fast interrupts and can't support a mixture of fast and slow interrupts even in principle.) Don't assume that intrmask_t == unsigned in pci_map_int().
Diffstat (limited to 'sys/pci/pci_compat.c')
-rw-r--r--sys/pci/pci_compat.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sys/pci/pci_compat.c b/sys/pci/pci_compat.c
index aa9e794..ad08075 100644
--- a/sys/pci/pci_compat.c
+++ b/sys/pci/pci_compat.c
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: pci_compat.c,v 1.16 1998/12/09 01:27:29 eivind Exp $
+ * $Id: pci_compat.c,v 1.17 1998/12/14 05:47:28 dillon Exp $
*
*/
@@ -209,9 +209,15 @@ pci_map_bwx(pcici_t cfg, u_long reg, vm_offset_t* va, vm_offset_t* pa)
return (0);
}
+int
+pci_map_int(pcici_t cfg, pci_inthand_t *handler, void *arg, intrmask_t *maskptr)
+{
+ return (pci_map_int_right(cfg, handler, arg, maskptr, 0));
+}
int
-pci_map_int(pcici_t cfg, pci_inthand_t *func, void *arg, unsigned *maskptr)
+pci_map_int_right(pcici_t cfg, pci_inthand_t *handler, void *arg,
+ intrmask_t *maskptr, u_int flags)
{
int error;
#ifdef APIC_IO
@@ -222,7 +228,8 @@ pci_map_int(pcici_t cfg, pci_inthand_t *func, void *arg, unsigned *maskptr)
void *dev_instance = (void *)-1; /* XXX use cfg->devdata */
void *idesc;
- idesc = intr_create(dev_instance, irq, func, arg, maskptr, 0);
+ idesc = intr_create(dev_instance, irq, handler, arg, maskptr,
+ flags);
error = intr_connect(idesc);
if (error != 0)
return 0;
@@ -255,8 +262,8 @@ pci_map_int(pcici_t cfg, pci_inthand_t *func, void *arg, unsigned *maskptr)
nextpin = next_apic_irq(irq);
while (nextpin >= 0) {
- idesc = intr_create(dev_instance, nextpin, func, arg,
- maskptr, 0);
+ idesc = intr_create(dev_instance, nextpin, handler,
+ arg, maskptr, flags);
error = intr_connect(idesc);
if (error != 0)
return 0;
OpenPOWER on IntegriCloud