From 92e81ca4752ced6ede32aa9fbb11afebb378a091 Mon Sep 17 00:00:00 2001 From: Bruce Evans Date: Wed, 13 Jan 1999 04:59:19 +0000 Subject: [PATCH] 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(). --- sys/dev/pci/pcivar.h | 7 +++++-- sys/pci/pci_compat.c | 17 ++++++++++++----- sys/pci/pcivar.h | 7 +++++-- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h index 75f48a8bc6d..15f1478753b 100644 --- a/sys/dev/pci/pcivar.h +++ b/sys/dev/pci/pcivar.h @@ -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: pcivar.h,v 1.22 1998/10/06 14:18:40 dfr Exp $ + * $Id: pcivar.h,v 1.23 1998/12/14 05:47:29 dillon Exp $ * */ @@ -223,7 +223,10 @@ int pci_map_port (pcici_t tag, u_long reg, pci_port_t* pa); int pci_map_mem (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa); int pci_map_dense (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa); int pci_map_bwx (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa); -int pci_map_int (pcici_t tag, pci_inthand_t *func, void *arg, unsigned *maskptr); +int pci_map_int (pcici_t tag, pci_inthand_t *handler, void *arg, + intrmask_t *maskptr); +int pci_map_int_right(pcici_t cfg, pci_inthand_t *handler, void *arg, + intrmask_t *maskptr, u_int flags); int pci_unmap_int (pcici_t tag); int pci_register_lkm (struct pci_device *dvp, int if_revision); diff --git a/sys/pci/pci_compat.c b/sys/pci/pci_compat.c index aa9e794ac73..ad08075fae0 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; diff --git a/sys/pci/pcivar.h b/sys/pci/pcivar.h index 75f48a8bc6d..15f1478753b 100644 --- a/sys/pci/pcivar.h +++ b/sys/pci/pcivar.h @@ -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: pcivar.h,v 1.22 1998/10/06 14:18:40 dfr Exp $ + * $Id: pcivar.h,v 1.23 1998/12/14 05:47:29 dillon Exp $ * */ @@ -223,7 +223,10 @@ int pci_map_port (pcici_t tag, u_long reg, pci_port_t* pa); int pci_map_mem (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa); int pci_map_dense (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa); int pci_map_bwx (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa); -int pci_map_int (pcici_t tag, pci_inthand_t *func, void *arg, unsigned *maskptr); +int pci_map_int (pcici_t tag, pci_inthand_t *handler, void *arg, + intrmask_t *maskptr); +int pci_map_int_right(pcici_t cfg, pci_inthand_t *handler, void *arg, + intrmask_t *maskptr, u_int flags); int pci_unmap_int (pcici_t tag); int pci_register_lkm (struct pci_device *dvp, int if_revision);