On Mon, 6 Jul 2020 at 06:52, Markus Armbruster <arm...@redhat.com> wrote: > This is TYPE_SD_CARD's ("sd-card"). What exactly does that device > model?
It is I think supposed to be an SD card. The modelling may well be odd -- it's a qomification of a pre-existing abstraction layer that predates QOM and qbus. > If it's the sd-card, then the modelling is odd. A physical SD card gets > plugged and unplugged as a whole. This model can't. Instead, you > change "media". Isn't the SD card the medium? I suspect this is because the requirement to change SD card contents existed and was implemented via changing the block backend before the concept of a hot-pluggable QOM object even existed. So now we have something we wish to maintain back-compat for (in terms of monitor commands to change/eject doing what they've always done), some SD controllers which haven't been entirely QOMified (I see Philippe just posted a series to do that cleanup, which is great), and some parts of the code which have been updated but by people (ie me) who understand the QOM parts of things but don't have any understanding of the operations the block layer provides and so converted the device/SD code's API to the rest of QEMU but left its interaction with the block layer using the same APIs that the pre-QOM code used. > The other device models with removable media (IDE & SCSI CD drives, > floppy drives) model the receptacle for media. On media change, the > drive stays put, and only the medium changes, both in the physical world > and in our virtual world. > > Our "sd-card" seems to be an "SD card drive". But then I wonder what > the thing at the other end of TYPE_SD_BUS ("sd-bus") actually models. > Any ideas? The thing at the other end of the TYPE_SD_BUS is the SD controller (ie the bit of hardware which presents a registers-and-interrupts interface to the system on one end and has an SD card slot on the other end). The link between them has operations like "do command", "read data", "write data", "get readonly status", which are abstractions of the h/w operations on the pins between an SD controller and the SD card. It also has an operation for "tell the controller I'm actually an inserted card". So the "sd-card" device implements the logic that in real h/w really is inside the microcontroller on the SD card (and so is identical for all SD cards regardless of machine type), and the sd controller device implements the logic that's in the sd controller chip in the machine proper (which can vary a lot between machines, from very-simple "software does all the work and the controller just waves the wires up and down" to much more sophisticated setups). thanks -- PMM