Date: Tue, 23 Sep 1997 23:00:18 +0200 From: Stefan Esser <se@FreeBSD.ORG> To: Nate Williams <nate@mt.sri.com> Cc: mobile@FreeBSD.ORG, current@FreeBSD.ORG, Stefan Esser <se@FreeBSD.ORG> Subject: Re: PCCARD in -current broken Message-ID: <19970923230018.00034@mi.uni-koeln.de> In-Reply-To: <199709231929.NAA08312@rocky.mt.sri.com>; from Nate Williams on Tue, Sep 23, 1997 at 01:29:37PM -0600 References: <199709231929.NAA08312@rocky.mt.sri.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sep 23, Nate Williams <nate@mt.sri.com> wrote: > It has been for some time (May). If it works on your box, you're > lucky! (PHK is one of the lucky ones, and it may be related to using > more PCI-like machines, unlike older 'straight-ISA' laptops). Hmmm, I'm surprised to hear that ... You are the first to report such a problem. > The change to the 'generic' shared interrupt code broke some assumptions > I had about 'register_intr()' and 'unregister_intr()' in > /sys/pccard/pcic.c. Basically, I had assumed the register_intr() would > fail if I wanted access to an interrupt that was already taken, and now > it succeeds so I add it to my list of 'available' IRQ's (I'd give it > back, but at this point the freemask is really hosed). This assumption > leads to all sorts of problems, of which I haven't completely thought > about. There should not be a problem. ISA does not (should not, I didn't check the sources recently) register the handler as shared, and this will prevent another handler (both shared or exclusive) to be registered. I assume this does not work for you ? > In any case, until the code in /sys/kern/kern_intr.c ifdef'd out by > 'RESOURCE_CHECK' is finished, or something else is done to make sure The code is finished, but I did not commit it to -current, since I was waiting for the new ISA device probe/attach code to become available. Several concepts have been discussed, with the "extent registration" of NetBSD being mentioned very often. My concept is quite different, in that I'd rather have a functional interface, which works on bus-dependent data structures that have to exist anyway, while the extent data does exist independently of device data. I have outlined this before ... > that 'ISA/Exclusive' interrupts are not allowed to be registered as > 'shared' resources, I think there are potential problems with the Well, ISA interrupts should be registered in a way that guarantees they are not shared. > current scheme, and may even effect 'normal' (non-laptop) systems who > use ISA devices, though it's doubtful they do silly things like I'm > doing in the PCCARD code. > > I don't have any solutions in the short-term, but I wanted to let folks > know about the possible problems. Hmmm, I just checked the sources and I can't see what's wrong. Please tell me why the following is not sufficient: config_isadev_c() calls register_intr() register_intr() contains the following lines: flags |= INTR_EXCL; idesc = intr_create((void *)device_id, intr, handler, (void*)unit, maskptr, flags); return (intr_connect(idesc)); intr_create() just stores the flag in the interrupt descriptor, intr_connect() calls add_intrdesc(), which has: if ((idesc->flags & INTR_EXCL) != 0 || (head->flags & INTR_EXCL) != 0) { /* * can't append new handler, if either list head or * new handler do not allow interrupts to be shared */ printf("\tdevice combination doesn't support shared irq%d\n", irq); return (-1); } As soon as some ISA device got an interrupt registered, no second handler will be added. I've checked, that pccard.c also uses the register_intr() compatibility call, and thus it will also get INTR_EXCL added to the flags value supplied (which is a constant "0"). Please tell me what's wrong with this ... Regards, STefan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19970923230018.00034>