qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 6/6] hw/sd.c: convert to QOM object


From: Igor Mitsyanko
Subject: Re: [Qemu-devel] [PATCH 6/6] hw/sd.c: convert to QOM object
Date: Mon, 02 Apr 2012 23:56:56 +0300
User-agent: Mozilla/5.0 (Windows NT 5.2; WOW64; rv:11.0) Gecko/20120312 Thunderbird/11.0

On 02.04.2012 7:48 PM, Peter Maydell wrote:
On 2 April 2012 15:28, Igor Mitsyanko<address@hidden>  wrote:
+    s->card = SD_CARD(object_new(TYPE_SD_CARD));
     dinfo = drive_get_next(IF_SD);
-    s->card = sd_init(dinfo ? dinfo->bdrv : NULL, 0);
+    SD_GET_CLASS(s->card)->init(s->card, dinfo ? dinfo->bdrv : NULL, false);

Ideally rather than having a class specific init function we
should make the 'is_spi' and 'bdrv' be object properties, and
then you do something like (syntax probably wrong but):
   s->card = SD_CARD(object_new(TYPE_SD_CARD));
   if (dinfo) {
      object_property_set_bdrv(s->card, dinfo->bdrv, "bdrv", errp);
   }
   realize(s->card);

(where the default for bdrv is NULL and the default for is_spi is false
so we don't need to set that).

This needs realize support for QOM objects, though.

-- PMM



I absolutely agree, that's how I wanted to do this in my working tree at first, but then several issues arose: 1) Pointer properties are obviously interfere with QOM principles, BDRV should be a link instead; 2) At first I made SD card child of SD host controller, but it most certainly wrong, it should be a link. But where should it be placed, under /block-dev/* maybe? 3) There is no point in creating SD card object until user specified an image. 4) Not every host controller on specific board is actually active, and nothing good will happen if you will try to hot-insert SD card in controller which was not activated by kernel. Having a child<SD> property in every controller instance is wrong.

What I want to do now is introduce CardSlot object and probably also HostControllerClass. Boards will instantiate as much CardSlots as it actually has and connect them with SDHC with links. SDCard object will be dynamically created and destroyed by setting CardSlot::inserted and CardSlot::image properties, SDcards will be childs of CardSlots.
But I havn't figured out how to avoid additional overhead in such a scheme.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]