Messages in this thread | | | Date | Tue, 9 Sep 2008 11:06:13 +0200 | From | Michał Mirosław <> | Subject | Re: MMC host driver requirements |
| |
On Tue, Sep 09, 2008 at 09:18:00AM +0200, Pierre Ossman wrote: > On Sun, 7 Sep 2008 23:52:28 +0200 > Michał Mirosław <mirq-linux@rere.qmqm.pl> wrote: > > I'm writing a driver for ENE CB710/720 memory card readers found in some > > laptops (ie. some versions of HP Compaq nx9500). This chip has three > > memory card interfaces: MMC/SD, SmartMedia, MemoryStick. I started with > > the MMC interface as I have a card to test it with, but I could not find > > any documentation about MMC stack besides the source code. > Hmm... I thought the CB710/720 only had an SDHCI interface for the > MMC/SD portion.
SDHCI supports CB712/714 parts. I already investigated that CB710 is not SDHCI-compatible (register layout is a bit different, for a start).
> > So here are some questions: > > > > 1. Can I call mmc_detect_change() after mmc_alloc_host() but before or > > during mmc_add_host() (ie. from interrupt handler)? If yes, what > > if mmc_alloc_host() fails then? > No you can't.
> > 2. Can I call mmc_request_done() from ->request() handler? > Yes, although I'm not sure how well tested it is.
I checked yesterday that indeed nothing bad happens, but looking at the code I can see that mmc_request_done can call ->request() with a retried request so, unless gcc optimizes tail-calls, recursion there might eat up all stack space someday.
> > 3. Does MMC stack serialize calls to ->request() or any other host > > driver ops? > Requests are serialised, yes. But you could in theory get set_ios() > calls during an ongoing request. Doing so would be very undefined > though so it should be sufficient to just avoid crashing the entire > system if that happens.
This should be easy.
> > 4. What is the difference (if any) between mrq->data and mrq->cmd->data > > as seen from ->request()? > Not much really. The cmd->data pointer is for convenience as it allows > common code paths for handling mrq->cmd and mrq->stop.
Is it safe to assume that cmd->data is NULL when command type is other than ADTC? I've looked briefly through drivers/mmc/core/*_ops.c, but maybe I missed something?
> > 5. Are there any constraints to scatterlist passed to ->request() > > - number of elements, data alignment, element data size? > > (At first I assumed that there are none and have writted a simple > > wrapper to guarantee multiple-of-16-byte data blocks - but maybe > > its just not needed?) > None at all. You have to specify your restrictions in the mmc_host > structure fields (note that you cannot restrict alignment in any way). > The mmc_test driver is useful for testing some of the corner cases.
I'll give it a try.
Thanks for your reply. I'll post the code for review when it does more than just blinking LEDs. ;)
Best Regards, Michał Mirosław
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |