summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pccard
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2001-08-14 19:18:33 +0000
committerimp <imp@FreeBSD.org>2001-08-14 19:18:33 +0000
commit566a98cb135433c2de5707ef25700adb5447d77f (patch)
treef3ff4ee4f641b4d657544b63ee43a5c536de6414 /usr.sbin/pccard
parent93c81003304a338ef8abf4324a7131976c9c8f37 (diff)
downloadFreeBSD-src-566a98cb135433c2de5707ef25700adb5447d77f.zip
FreeBSD-src-566a98cb135433c2de5707ef25700adb5447d77f.tar.gz
Ask the kernel about IRQ 0 first. If the kernel responds with an IRQ,
use it. If not, then loop asking for each one, with normal -I processing. This will effectively disable -I for when the pcic is in PCI function interrupt routing mode.
Diffstat (limited to 'usr.sbin/pccard')
-rw-r--r--usr.sbin/pccard/pccardd/cardd.c40
-rw-r--r--usr.sbin/pccard/pccardd/pccardd.c2
2 files changed, 22 insertions, 20 deletions
diff --git a/usr.sbin/pccard/pccardd/cardd.c b/usr.sbin/pccard/pccardd/cardd.c
index 09a51bc..6b81154 100644
--- a/usr.sbin/pccard/pccardd/cardd.c
+++ b/usr.sbin/pccard/pccardd/cardd.c
@@ -521,27 +521,29 @@ assign_driver(struct slot *sp, struct card *cp)
res.type = SYS_RES_IRQ;
res.size = 1;
if (conf->irq == 0) {
- for (i = 1; i < 16; i++) {
- /*
- * The foloowing code will properly implement sanpai's
- * -I option. However, it will break everyone that
- * I told to use this as a workaround for my pccard
- * patches testing.
- */
- if (!use_kern_irq && pool_irq[i]) {
- conf->irq = i;
- pool_irq[i] = 0;
- break;
- }
- res.min = i;
- res.max = i;
- if (ioctl(sp->fd, PIOCSRESOURCE, &res) < 0)
- err(1, "ioctl (PIOCSRESOURCE)");
- if (res.resource_addr == ~0ul)
- continue;
+ res.min = 0;
+ res.max = 0;
+ if (ioctl(sp->fd, PIOCSRESOURCE, &res) < 0)
+ err(1, "ioctl (PIOCSRESOURCE)");
+ if (res.resource_addr != ~0ul) {
conf->irq = res.resource_addr;
pool_irq[conf->irq] = 0;
- break;
+ } else {
+ for (i = 1; i < 16; i++) {
+ if (!use_kern_irq && pool_irq[i]) {
+ conf->irq = i;
+ pool_irq[i] = 0;
+ break;
+ }
+ res.min = i;
+ res.max = i;
+ if (ioctl(sp->fd, PIOCSRESOURCE, &res) < 0)
+ err(1, "ioctl (PIOCSRESOURCE)");
+ if (res.resource_addr == ~0ul)
+ continue;
+ conf->irq = res.resource_addr;
+ pool_irq[conf->irq] = 0;
+ }
}
if (conf->irq == 0) {
logmsg("Failed to allocate IRQ for %s\n", cp->manuf);
diff --git a/usr.sbin/pccard/pccardd/pccardd.c b/usr.sbin/pccard/pccardd/pccardd.c
index 4bca2c4..ba70336 100644
--- a/usr.sbin/pccard/pccardd/pccardd.c
+++ b/usr.sbin/pccard/pccardd/pccardd.c
@@ -171,7 +171,7 @@ main(int argc, char *argv[])
while ((count = getopt(argc, argv, COM_OPTS)) != -1) {
switch (count) {
case 'I':
- /* use_kern_irq = 0; */
+ use_kern_irq = 0;
break;
case 'd':
setbuf(stdout, 0);
OpenPOWER on IntegriCloud