On 12 December 2011 06:43, Evgeny Voevodin <e.voevo...@samsung.com> wrote: > From: Mitsyanko Igor <i.mitsya...@samsung.com> > > Data transfer direction between host controller and SD/MMC card is selected by > host controller configuration registers, but whether we actually need or need > not perform data transfer depends on type of last issued command. To avoid > memorization of which type of command host controller issued the last time, we > can use simple query procedures, to make sure that SD/MMC card is in the > right state. The only query routine currently presented in SD/MMC card > emulation is sd_data_ready(), this patch adds sd_receive_ready() routine.
I've thought about this a bit more and spent some time poking through the standards docs. I'm kind of suspicious of both this function and the existing sd_data_ready(). Real hardware doesn't have these signals, both ends of the sd-controller-to-card connection just do their thing and trust that the other end is in the state it is supposed to be. If you (in the controller model) don't already know whether you are OK to send/receive data then you haven't modelled some part of the controller's state properly. In your specific case you know whether a command is a data transfer command by the Data Present Select bit that was written to the Command Register. You know whether it's read or write by the Data Transfer Direction Select bit in the Transfer Mode Register. So you don't need to ask the sd card about these things. (The controller needs to not blow up if the guest sets Data Present for a command that isn't a data transfer command, and so on, but that should mostly just work out without special code I think.) -- PMM