Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Jun 2000 00:19:37 -0600
From:      Warner Losh <imp@village.org>
To:        Doug Rabson <dfr@nlsystems.com>
Cc:        new-bus@freebsd.org
Subject:   Re: Why can't I have.. 
Message-ID:  <200006270619.AAA31901@harmony.village.org>
In-Reply-To: Your message of "Tue, 27 Jun 2000 07:16:24 BST." <Pine.BSF.4.21.0006270715420.28246-100000@salmon.nlsystems.com> 
References:  <Pine.BSF.4.21.0006270715420.28246-100000@salmon.nlsystems.com>  

next in thread | previous in thread | raw e-mail | index | archive | help
In message <Pine.BSF.4.21.0006270715420.28246-100000@salmon.nlsystems.com> Doug Rabson writes:
: On Mon, 26 Jun 2000, Warner Losh wrote:
: 
: > 
: > ... a INTR_TYPE_FAST | INTR_TYPE_MISC?
: > 
: > It gives me:
: > 	panic("still using grody create_intr interface");
: > 
: > What's the deal?  It is easy enough to fix the problem, but I was
: > wondering why the code is still there...
: > 
: > This is, admittedly, in -stable.
: 
: Hmm. I thought Peter had fixed that ages ago. If you can generate patches,
: I would appreciate it.

Here's what I have.  Tell me how it is wrong and I'll fix it :-).

Fast interrupts make a *HUGE* difference for some hardware that I'm
writing a driver for hire fore.  This hardware generates an interrupt
on the first write to a FIFO.  In the ISR the you set the DMA
parameters of the card, and you have only until the FIFO fills up to
set the DMA.  Once the DMA is set, the fifo drains (as well as data
that is fed through it) and your hunk of data is complete.  The normal 
interrupts had too much of a latency to make them work.  Minor rework
of the driver for fast interrupts seems to have solved the latency
problem at the cost that each of these cards must have their own
interrupt.  Major rework of the driver could make it possible for
interrupt sharing with other cards of this type with one ISR handling
all of them.

Anyway, enough about my oddball hardware.  Here's the patch.

Warner

Index: nexus.c
===================================================================
RCS file: /home/imp/FreeBSD/CVS/src/sys/i386/i386/nexus.c,v
retrieving revision 1.26.2.2
diff -u -r1.26.2.2 nexus.c
--- nexus.c	2000/04/23 09:59:11	1.26.2.2
+++ nexus.c	2000/06/27 03:15:03
@@ -437,6 +437,9 @@
 	case INTR_TYPE_CAM:
 		mask = &cam_imask;
 		break;
+	case INTR_TYPE_MISC | INTR_TYPE_FAST:
+		icflags |= INTR_FAST;
+		/* FALLTHROUGH */
 	case INTR_TYPE_MISC:
 		mask = 0;
 		break;


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-new-bus" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200006270619.AAA31901>