Date: Wed, 01 Dec 1999 22:55:06 -0700 From: Warner Losh <imp@village.org> To: Mike Smith <msmith@FreeBSD.ORG> Cc: mobile@FreeBSD.ORG Subject: Re: cvs commit: src/sys/pccard pccard.c src/sys/isa sio.c src/sys/dev/ed if_ed_pccard.c src/sys/dev/ep if_ep_pccard.c Message-ID: <199912020555.WAA00484@harmony.village.org> In-Reply-To: Your message of "Wed, 01 Dec 1999 21:39:30 PST." <199912020539.VAA00927@mass.cdrom.com> References: <199912020539.VAA00927@mass.cdrom.com>
next in thread | previous in thread | raw e-mail | index | archive | help
In message <199912020539.VAA00927@mass.cdrom.com> Mike Smith writes:
: This actually becomes much more complex when you bring CardBus into the
: picture, as I believe (correct me if I'm wrong, since you have the spec
: there) that it uses level-triggered interrupts. In this case, the device
: interrupt handler can't return (well, it can, but it will be immediately
: re-entered).
Yes. Both cardbus and pccard use level triggered interrupts (or can
use level triggered interrupts). But if the card goes away, the
bridge, I believe, deasserts the interrupt for the card. Hmmm.
Actaully, it doesn't say that in the spec, so I'll have to look at my
datasheets to see what it does for sure.
: This really makes it imperative for the interrupt handler itself to be
: able to test for the hardware. The logic should probably go something
: like:
:
: dev_intr()
: {
: for(;;) {
: if (sc->device_is_removable && !bus_device_present()) {
: revoke_device(); /* disables interrupt */
: return;
: }
Race here between bus present check. Small window, I'll grant, however.
: if (!device_needs_attention(sc))
: return;
: ...
: Oh, and I forgot with the CardBus thing above; if the slot is sharing an
: interrupt with someone else, you're probably screwed as well. (Unless the
: bus lets you call back into it to disable a slot once you've detected
: that it's gone.)
I believe that it is common practice to share the cardbus card
interrupt with the cardbus bridge, but I may be mistaken about that.
: Hmm, thinking about it more, that would suggest that the "right" thing
: would be a bus method that is the equivalent of our current slot poll -
: the device driver checks the slot if it thinks the peripheral is acting
: up; the bus code can then call the detach routine, kill the interrupt
: off, etc. and the driver gets a return value that it can test in order to
: decide whether the device has been killed off. That would avoid all the
: mess with reference counting, etc. and only leave code elsewhere in the
: driver that's using the softc. You'd have to mask interrupts for that. 8(
Yes. One would :-<
I'll have to keep all this in mind as I move forward with cardbus/pc
card stuff in the newcard.
BTW, I just committed MIHIRA-san's port of the PAO power code, since
it looks like it would be good for testing purposes.
Warner
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199912020555.WAA00484>
