diff options
author | msmith <msmith@FreeBSD.org> | 1999-01-29 01:18:15 +0000 |
---|---|---|
committer | msmith <msmith@FreeBSD.org> | 1999-01-29 01:18:15 +0000 |
commit | f628a05cce8c95310258336788dea7ec78bd61bd (patch) | |
tree | 01795e267f109b495c57672232d38129f07ef5d3 /sys/pccard/pcic.c | |
parent | 3a3b9e8a275dbec133255c3cfc7a9e684618f84c (diff) | |
download | FreeBSD-src-f628a05cce8c95310258336788dea7ec78bd61bd.zip FreeBSD-src-f628a05cce8c95310258336788dea7ec78bd61bd.tar.gz |
Allow the interrupt allocated to the PCIC to be tuned from the kernel
environment by setting the variable machdep.pccard.pcic_irq. If
the IRQ is invalid, the PCIC will run in polled mode.
Diffstat (limited to 'sys/pccard/pcic.c')
-rw-r--r-- | sys/pccard/pcic.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/pccard/pcic.c b/sys/pccard/pcic.c index 943bbc0..651c1d5 100644 --- a/sys/pccard/pcic.c +++ b/sys/pccard/pcic.c @@ -526,7 +526,7 @@ int pcic_probe(void) { int slotnum, validslots = 0; - u_int free_irqs; + u_int free_irqs, desired_irq; struct slot *slt; struct pcic_slot *sp; unsigned char c; @@ -716,7 +716,19 @@ pcic_probe(void) * then attempt to get one. */ if (pcic_irq == 0) { + pcic_imask = soft_imask; + + /* See if the user has requested a specific IRQ */ + if (getenv_int("machdep.pccard.pcic_irq", &desired_irq)) + /* legal IRQ? */ + if ((desired_irq >= 1) && (desired_irq <= ICU_LEN) && + ((1ul << desired_irq) & soft_imask)) + pcic_imask = 1ul << desired_irq; + else + /* illeagal, disable use of IRQ */ + pcic_imask = 0; + pcic_irq = pccard_alloc_intr(free_irqs, pcicintr, 0, &pcic_imask, NULL); if (pcic_irq < 0) |