This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / drivers / net / auto_irq.c
1 /* auto_irq.c: Auto-configure IRQ lines for linux. */
2 /*
3     Written 1994 by Donald Becker.
4
5     The author may be reached as becker@scyld.com
6
7     This code is a general-purpose IRQ line detector for devices with
8     jumpered IRQ lines.  If you can make the device raise an IRQ (and
9     that IRQ line isn't already being used), these routines will tell
10     you what IRQ line it's using -- perfect for those oh-so-cool boot-time
11     device probes!
12
13     To use this, first call autoirq_setup(timeout). TIMEOUT is how many
14     'jiffies' (1/100 sec.) to detect other devices that have active IRQ lines,
15     and can usually be zero at boot.  'autoirq_setup()' returns the bit
16     vector of nominally-available IRQ lines (lines may be physically in-use,
17     but not yet registered to a device).
18     Next, set up your device to trigger an interrupt.
19     Finally call autoirq_report(TIMEOUT) to find out which IRQ line was
20     most recently active.  The TIMEOUT should usually be zero, but may
21     be set to the number of jiffies to wait for a slow device to raise an IRQ.
22
23     The idea of using the setup timeout to filter out bogus IRQs came from
24     the serial driver.
25 */
26
27
28 #ifdef version
29 static const char *version=
30 "auto_irq.c:v1.11 Donald Becker (becker@scyld.com)";
31 #endif
32
33 #include <linux/module.h>
34 #include <linux/jiffies.h>
35 #include <linux/delay.h>
36 #include <asm/bitops.h>
37 #include <asm/io.h>
38 #include <asm/irq.h>
39 #include <linux/netdevice.h>
40
41 static unsigned long irqs;
42
43 void autoirq_setup(int waittime)
44 {
45         irqs = probe_irq_on();
46 }
47
48 #define BUSY_LOOP_UNTIL(j) while ((long)(jiffies-(j)) < 0) ;
49 int autoirq_report(int waittime)
50 {
51         unsigned long delay = jiffies + waittime;
52         BUSY_LOOP_UNTIL(delay)
53         return probe_irq_off(irqs);
54 }
55
56 EXPORT_SYMBOL(autoirq_setup);
57 EXPORT_SYMBOL(autoirq_report);
58
59 \f
60 /*
61  * Local variables:
62  *  compile-command: "gcc -DKERNEL -Wall -O6 -fomit-frame-pointer -I/usr/src/linux/net/tcp -c auto_irq.c"
63  *  version-control: t
64  *  kept-new-versions: 5
65  *  c-indent-level: 4
66  *  tab-width: 4
67  * End:
68  */