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>