summaryrefslogtreecommitdiffstats
path: root/sys/pccard/pcic.c
diff options
context:
space:
mode:
authormsmith <msmith@FreeBSD.org>1999-01-29 01:18:15 +0000
committermsmith <msmith@FreeBSD.org>1999-01-29 01:18:15 +0000
commitf628a05cce8c95310258336788dea7ec78bd61bd (patch)
tree01795e267f109b495c57672232d38129f07ef5d3 /sys/pccard/pcic.c
parent3a3b9e8a275dbec133255c3cfc7a9e684618f84c (diff)
downloadFreeBSD-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.c14
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)
OpenPOWER on IntegriCloud