auto_irq.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
- /* auto_irq.c: Auto-configure IRQ lines for linux. */
- /*
- Written 1994 by Donald Becker.
- The author may be reached as becker@scyld.com
- This code is a general-purpose IRQ line detector for devices with
- jumpered IRQ lines. If you can make the device raise an IRQ (and
- that IRQ line isn't already being used), these routines will tell
- you what IRQ line it's using -- perfect for those oh-so-cool boot-time
- device probes!
- To use this, first call autoirq_setup(timeout). TIMEOUT is how many
- 'jiffies' (1/100 sec.) to detect other devices that have active IRQ lines,
- and can usually be zero at boot. 'autoirq_setup()' returns the bit
- vector of nominally-available IRQ lines (lines may be physically in-use,
- but not yet registered to a device).
- Next, set up your device to trigger an interrupt.
- Finally call autoirq_report(TIMEOUT) to find out which IRQ line was
- most recently active. The TIMEOUT should usually be zero, but may
- be set to the number of jiffies to wait for a slow device to raise an IRQ.
- The idea of using the setup timeout to filter out bogus IRQs came from
- the serial driver.
- */
- #ifdef version
- static const char *version=
- "auto_irq.c:v1.11 Donald Becker (becker@scyld.com)";
- #endif
- #include <linux/module.h>
- #include <linux/sched.h>
- #include <linux/delay.h>
- #include <asm/bitops.h>
- #include <asm/io.h>
- #include <asm/irq.h>
- #include <linux/netdevice.h>
- static unsigned long irqs;
- void autoirq_setup(int waittime)
- {
- irqs = probe_irq_on();
- }
- #define BUSY_LOOP_UNTIL(j) while ((long)(jiffies-(j)) < 0) ;
- int autoirq_report(int waittime)
- {
- unsigned long delay = jiffies + waittime;
- BUSY_LOOP_UNTIL(delay)
- return probe_irq_off(irqs);
- }
- EXPORT_SYMBOL(autoirq_setup);
- EXPORT_SYMBOL(autoirq_report);
- /*
- * Local variables:
- * compile-command: "gcc -DKERNEL -Wall -O6 -fomit-frame-pointer -I/usr/src/linux/net/tcp -c auto_irq.c"
- * version-control: t
- * kept-new-versions: 5
- * c-indent-level: 4
- * tab-width: 4
- * End:
- */